const { Sequelize, DataTypes } = require("sequelize");
const sequelize = require("./db");
const MD5 = require("../utils/MD5");

const User = sequelize.define(
  "user",
  {
    // 在这里定义模型属性(字段)
    id: {
      type: DataTypes.UUID, // 数据类型
      primaryKey: true, // 主键
      allowNull: false, // k允许为空 设置列的 allowNull为 false 将会为该列增加 非空 属性
      unique: true, // unique: 'compositeIndex', unique: true
      defaultValue: Sequelize.UUIDV4
    },
    // 在模型中的名字是小驼峰,在表中的列名可以用 field 属性来指定
    userName: {
      type: Sequelize.STRING
    },
    // 创建外码
    passWord: {
      type: Sequelize.STRING,
      set(value) {
        // 设置存入数据库的值格式化,(密码加密)
        this.setDataValue("passWord", MD5(value));
      }
    },
    nickName: {
      type: DataTypes.STRING
    },
    sex: {
      type: DataTypes.INTEGER
    }
  },
  {
    // 这是其他模型参数
    freezeTableName: true, // 冻结表名 user 不会变成复数 users
    timetamps: true, // 自定添加创建时间修改时间字段createdAt 和 updatedAt
    underscored: false, // 防止驼峰式字段被默认转为下划线 userId不会变成user_id
    createdAt: false, //不想要 createdAt
    updatedAt: "updateTimestamp" // 想要 updatedAt 但是希望名称叫做 updateTimestamp
  }
);

// 同步模型
User.sync();

// 定义表之间的关联
// User.associate = function () {};

module.exports = User;
